﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BlueCMS.Core.Data.Query.Conditions
{
    public interface IConditionChain
    {
        IStartNode StartGroup();

        // LHS Operators
        ILHSNode Aggregate(string clause);
        ILHSNode Column(string name);
        ILHSNode Constant(object value);
        ILHSNode Parameter(object value);

        //// Multi Operators
        //IConditionNode In(object nameOrExpression, params object[] namesOrExpressions);
        //IConditionNode NotIn(object nameOrExpression, params object[] namesOrExpressions);

        //// Binary Operators
        //IConditionNode Equals(object nameOrExpressionLHS, object nameOrExpressionRHS);
        //IConditionNode NotEquals(object nameOrExpressionLHS, object nameOrExpressionRHS);
        //IConditionNode GreaterThan(object nameOrExpressionLHS, object nameOrExpressionRHS);
        //IConditionNode GreaterThanOrEqual(object nameOrExpressionLHS, object nameOrExpressionRHS);
        //IConditionNode LessThan(object nameOrExpressionLHS, object nameOrExpressionRHS);
        //IConditionNode LessThanOrEqual(object nameOrExpressionLHS, object nameOrExpressionRHS);
        //IConditionNode Like(object nameOrExpressionLHS, object nameOrExpressionRHS);
        //IConditionNode NotLike(object nameOrExpressionLHS, object nameOrExpressionRHS);

        //// Unary Operators
        //IConditionNode IsNull(object nameOrExpression);
        //IConditionNode IsNotNull(object nameOrExpression);
        //IConditionNode Exists(object nameOrExpression);
        //IConditionNode NotExists(object nameOrExpression); 
        
        //IConditionNode Condition(object nameOrExpression, MultiOperators op, params object[] namesOrExpressions);
        //IConditionNode Condition(object nameOrExpressionLHS, BinaryOperators op, object nameOrExpressionRHS);
        //IConditionNode Condition(object nameOrExpression, UnaryOperators op);
    }
}
